// 导航守卫 授权文件 当前文件引入在哪儿？主入口文件中
import router from '@/router';
import { login } from '@/utils'
import store from '@/store'

/***
 * 后台系统：
 * 1. 难点是权限
 * 2. 亮点是权限/数据可视化系统开发/拖拽的拓扑图/富文本编辑框
 * 
 * 什么是权限判断？权限判断：RBAC（）
 * 权限判断一般用在什么项目中？用在什么场景中？
 * to B 项目，类似于：后台系统/中台系统/CMS系统（内容分发系统）
 * to C 项目，移动/h5/小程序/app(登陆权限-：导航守卫)
 * 
 * 1. 区分角色（基于登陆权限，拿到用户身份权限信息）
 * 2. 在路由表中，定义权限字段，meta()
 * 3. 封装过滤函数，递归调用，过滤出当前需要的路由数组
 * 4. router.addRoutes(arr)
 * 
 * 5. 加入了导航守卫（守卫登陆权限）
 * 
 */

router.beforeEach((to, from, next) => {
  console.log('to', to.path, '--------')
  // 1. 判断token ，如果有token，就干什么？next进入页面
  // 2. 如果没有token，跳转回login页面。可以在跳转的过程中，带上参数path;.等待登陆成功之后，直接跳转回去
  // 3. 如果用户有token, 请求一个接口，获取用户信息接口
  if (to.path !== '/login') {
    if (login.getToken()) {
      // 获取用户信息，然后next
      // GetInfo
      // 判断条件------请求一次用户信息接口
      store.dispatch('GetInfo').then(res => {
        console.log('我是permission页面:授权页面', res)
        // next({
        //   path: '/'
        // })
      })
    } else {
      // 跳转到登陆页面
      next('/login')
    }
  } else {
    next()
  }
})

// const whiltList = ['/about']

/**
 * 1. 封装过滤函数
 * 2. 循环遍历 递归
 *
 * 3. 判断
 *   - 判断第一级路由中的meta.useId是否有 当前用户的useid
 *   - 如果有，接着判断当前一级路由的子路由是否有当前的用户信息权限 （与第一级路由判断逻辑一致，可以递归调用判断）
 *   - 如果没有，
 *
 * includes() 字符串的和数组的方法
 */
